/**
 * 类型定义文件
 */

/**
 * 姓名风格枚举
 */
export enum NameStyle {
    /** 传统正式 */
    TRADITIONAL = 'traditional',
    /** 现代时尚 */
    MODERN = 'modern',
    /** 文艺清新 */
    LITERARY = 'literary',
    /** 古风雅致 */
    CLASSICAL = 'classical'
}

/**
 * 昵称风格枚举
 */
export enum NickStyle {
    /** 俏皮可爱 */
    CUTE = 'cute',
    /** 风趣幽默 */
    FUNNY = 'funny',
    /** 网络流行 */
    INTERNET = 'internet',
    /** 霸气威武 */
    COOL = 'cool',
    /** 文艺小清新 */
    FRESH = 'fresh',
    /** 二次元 */
    ANIME = 'anime'
}

/**
 * 支持的语言枚举
 */
export enum Language {
    /** 中文 */
    CHINESE = 'zh',
    /** 英文 */
    ENGLISH = 'en',
    /** 日语 */
    JAPANESE = 'ja',
    /** 韩语 */
    KOREAN = 'ko'
}

/**
 * 昵称数据结构
 */
export interface NickNameData {
    /** 昵称前缀 */
    headers: string[];
    /** 昵称后缀 */
    foots: string[];
}

/**
 * 风格化昵称数据
 */
export interface StyledNickData {
    [NickStyle.CUTE]: NickNameData;
    [NickStyle.FUNNY]: NickNameData;
    [NickStyle.INTERNET]: NickNameData;
    [NickStyle.COOL]: NickNameData;
    [NickStyle.FRESH]: NickNameData;
    [NickStyle.ANIME]: NickNameData;
}

/**
 * 多语言昵称数据
 */
export interface MultiLanguageNickData {
    [Language.CHINESE]: {
        default: NickNameData;
        styled: StyledNickData;
    };
    [Language.ENGLISH]: {
        default: NickNameData;
        styled: StyledNickData;
    };
    [Language.JAPANESE]: {
        default: NickNameData;
        styled: StyledNickData;
    };
    [Language.KOREAN]: {
        default: NickNameData;
        styled: StyledNickData;
    };
}

/**
 * 姓名数据结构
 */
export interface NameData {
    /** 女性名字 */
    female: string[];
    /** 男性名字 */
    male: string[];
    /** 单姓 */
    familyNamesSingle: string[];
    /** 复姓 */
    familyNamesCompound: string[];
}

/**
 * 风格化姓名数据
 */
export interface StyledNameData {
    [NameStyle.TRADITIONAL]: { male: string[], female: string[] };
    [NameStyle.MODERN]: { male: string[], female: string[] };
    [NameStyle.LITERARY]: { male: string[], female: string[] };
    [NameStyle.CLASSICAL]: { male: string[], female: string[] };
}

/**
 * 自定义配置接口
 */
export interface CustomConfig {
    /** 自定义姓氏列表 */
    customFamilyNames?: string[];
    /** 自定义名字列表 */
    customGivenNames?: string[];
    /** 自定义昵称前缀 */
    customNickHeaders?: string[];
    /** 自定义昵称后缀 */
    customNickFoots?: string[];
    /** 姓名风格 */
    nameStyle?: NameStyle;
    /** 昵称风格 */
    nickStyle?: NickStyle;
    /** 语言设置 */
    language?: Language;
    /** 是否混合使用自定义和默认数据 */
    mixWithDefault?: boolean;
}

/**
 * 生成选项接口
 */
export interface GenerateOptions {
    /** 性别 */
    gender?: 'male' | 'female' | 'mixed';
    /** 是否包含复姓 */
    sur?: boolean;
    /** 姓名风格 */
    style?: NameStyle;
    /** 语言 */
    language?: Language;
}

/**
 * 随机姓名生成器接口
 */
export interface IRandomName {
    /** 昵称前缀数组（形容词） */
    nickHeader: string[];
    /** 昵称后缀数组（名词） */
    nickFoot: string[];
    /** 女性名字字符数组 */
    femaleNameItems: string[];
    /** 男性名字字符数组 */
    maleNameItems: string[];
    /** 单姓数组 */
    familyNameItemsSin: string[];
    /** 复姓数组 */
    familyNameItemsSur: string[];
    /** 所有名字字符数组（男女通用） */
    allName: string[];
    /** 所有姓氏数组（单姓+复姓） */
    familyNameItemsAll: string[];

    /** 获取随机昵称前缀 */
    getNickHeader(style?: NickStyle, language?: Language): string;
    /** 获取随机昵称后缀 */
    getNickFoot(style?: NickStyle, language?: Language): string;
    /** 生成随机昵称 */
    getNickName(style?: NickStyle, language?: Language): string;
    /** 获取随机姓氏 */
    getFamilyName(sur?: boolean): string;
    /** 生成随机女性姓名 */
    getFemaleName(sur?: boolean, style?: NameStyle): string;
    /** 生成随机男性姓名 */
    getMaleName(sur?: boolean, style?: NameStyle): string;
    /** 生成随机姓名（不区分性别） */
    getName(sur?: boolean, style?: NameStyle): string;
    /** 批量生成姓名 */
    generateNames(count: number, options?: GenerateOptions): string[];
    /** 批量生成昵称 */
    generateNickNames(count: number, style?: NickStyle, language?: Language): string[];
    /** 添加自定义数据 */
    addCustomData(config: CustomConfig): void;
    /** 重置为默认数据 */
    resetToDefault(): void;
    /** 获取当前配置 */
    getConfig(): CustomConfig;
    /** 获取可用的风格和语言列表 */
    getAvailableOptions(): { 
        nameStyles: NameStyle[], 
        nickStyles: NickStyle[], 
        languages: Language[] 
    };
}
